import pandas as pd
reviews = pd.read_csv("./winemag-data-130k-v2.csv", index_col=0)
pd.set_option("display.max_rows", 5)
我們可以將同樣類型的東西group起來,並且計算出數量
reviews.groupby('points').points.count()
points
80 397
81 692
...
99 33
100 19
Name: points, Length: 21, dtype: int64
我們可以使用summary function來處理資料,例如說可以取得group後的min
reviews.groupby('points').price.min()
points
80 5.0
81 5.0
...
99 44.0
100 80.0
Name: price, Length: 21, dtype: float64
可以用apply來處理groupby後的資料
reviews.groupby('winery').apply(lambda df: df.title.iloc[0])
winery
1+1=3 1+1=3 NV Rosé Sparkling (Cava)
10 Knots 10 Knots 2010 Viognier (Paso Robles)
...
àMaurice àMaurice 2013 Fred Estate Syrah (Walla Walla V...
Štoka Štoka 2009 Izbrani Teran (Kras)
Length: 16757, dtype: object
可以利用lambda來取出group中,point最大的值
reviews.groupby(['country', 'province']).apply(lambda df: df.loc[df.points.idxmax()])
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
另外一個可以值得一提的function是agg()
可以利用這個函式取得summary的function
reviews.groupby(['country']).price.agg([len, min, max])
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
有效的利用groupby可以對資料做很多有力的處理
一般來說看到的都是single-label index
但是由於groupby可以group多個feature,因此會產生multi-indexs
countries_reviewed = reviews.groupby(['country', 'province']).description.agg([len])
countries_reviewed
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
mi = countries_reviewed.index
type(mi)
pandas.core.indexes.multi.MultiIndex
可以利用reset_index()
方法將MultiIndex轉為SingleIndex
countries_reviewed.reset_index()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
reset index完了之後,可以用sort_values
根據len
這個column做排序
countries_reviewed = countries_reviewed.reset_index()
countries_reviewed.sort_values(by='len')
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
sort_values
也能倒轉排序,將參數ascending
設為False
countries_reviewed.sort_values(by='len', ascending=False)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
若要根據index
做排序,可以使用sort_index()
函式
countries_reviewed.sort_index()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
sort
也可以一次排序多個column
countries_reviewed.sort_values(by=['country', 'len'])
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}